package com.lyc.platform.message.core.message.device;

import com.lyc.platform.message.core.header.HeaderKey;
import com.lyc.platform.message.core.json.Jsonable;
import com.lyc.platform.message.core.message.Message;

public interface DeviceMessage extends Message, Jsonable {

    /**
     * 获取设备id
     *
     * @return 设备ID
     */
    String getDeviceId();

    /**
     * 获取当前时间戳
     *
     * @return
     */
    @Override
    long getTimestamp();

    /**
     * 设备消息添加消息头
     *
     * @param header 消息头
     * @param value  消息值
     * @param <T>    消息类型
     * @return 此消息
     */
    @Override
    default <T> DeviceMessage addHeader(HeaderKey<T> header, T value) {
        Message.super.addHeader(header, value);
        return this;
    }

    /**
     * @param header 消息头
     * @param value  消息值
     * @return
     */
    @Override
    DeviceMessage addHeader(String header, Object value);

    /**
     * @param header 消息头
     * @param value  消息值
     * @param <T>    消息类型
     * @return 设备信息；
     */
    @Override
    default <T> DeviceMessage addHeaderIfAbsent(HeaderKey<T> header, T value) {
        Message.super.addHeaderIfAbsent(header, value);
        return this;
    }

    @Override
    DeviceMessage addHeaderIfAbsent(String header, Object value);
}
